20 پرسش و پاسخ مهم مصاحبه استخدام برنامه‌نویس پایتون
۱۴۰۰/۰۳/۰۵ تاریخ انتشار

آیا به دنبال احراز شغلی مرتبط با زبان برنامه‌نویسی پایتون هستید؟ اولین نکته‌ای که باید به آن دقت کنید پرسش‌های مطرح شده در جلسات مصاحبه فنی است. سوالاتی که ممکن است ساده یا بیش از اندازه مشکل باشند. در این مقاله با مهم‌ترین پرسش‌هایی که ممکن است در جلسات استخدامی با آن‌ها روبرو شوید به همراه پاسخ آن‌ها آشنا می‌شوید. 

1. چه تفاوتی میان Shallow Copy و Deep Copy وجود دارد؟

Deepcopy یک شی کاملا متفاوت ایجاد می‌کند. بنابراین، تغییرات در شی اصلی در نسخه کپی شده منعکس نمی‌شوند.

Shallow copy یک شی جدید متفاوت ایجاد می‌کند و آن‌را به شی اصلی مرتبط می‌کند. بنابراین، تغییرات در شی اصلی در نسخه کپی شده نیز منعکس می‌شود.

2. چندریسمانی در پایتون چگونه انجام می‌شود؟

چند ریسمانی به حالتی اشاره دارد که چند ریسمان به‌طور همزمان اجرا می‌شوند. Python Global Interpreter Lock اجازه نمی‌دهد که مفسر پایتون در یک لحظه بیش از یک ریسمان را نگه‌داری کند. بنابراین چند ریسمانی در پایتون از طریق سوئیچینگ زمینه (Context Switching) به دست می‌آید. رویکرد فوق کاملا متفاوت از چند پردازه‌ای است که اشاره به این نکته دارد که چند فرآیند در چند ریسمان باز می‌شوند. 

3. کمی درباره معماری جنگو صحبت کنید.

جنگو (Django) یک سرویس وب است که برای ساخت صفحات وب استفاده می‌شود. معماری آن به شرح زیر است:

  • الگو: به فرانت‌اند یا نمای ظاهری صفحه وب اشاره دارد. 
  • مدل: به بک‌اند یا نمای پس‌زمینه که داده‌ها در آن ذخیره‌سازی می‌شوند اشاره دارد. 
  • نما: با مدل و الگو ارتباط برقرار می‌کند و خروجی را با آدرس اینترنتی ترسیم می‌کند. 
  • Django: صفحه را به کاربر ارائه می‌دهد.

4. Numpy Array چه مزیتی نسبت به Nested List دارد؟ 

Numpy به زبان سی نوشته شده است و به همین دلیل تمام پیچیدگی‌ها به عقب انتقال داده شده تا کاربر بتواند به شکل ساده‌ای از آن استفاده کند. فهرست‌ها در سمت دیگر داستان قرار دارند و مبتنی بر الگوی dynamically typed هستند. بنابراین، پایتون باید نوع داده هر عنصر را زمانی که از آن استفاده می‌کند بررسی کند. این‌کار باعث می‌شود تا آرایه‌های Numpy سریع‌تر از فهرست‌ها شوند. 

Numpy قابلیت‌های اضافی زیادی دارد که یک فهرست ارائه نمی‌کند. به‌طور مثال، امکان خودکارسازی عملیات مختلف در Numpy وجود دارد. 

5. ‌Pickling و Unpickling چیست؟

Unpickling ‌

  • تبدیل یک جریان بایت به سلسله مراتب شی پایتون Unpickling نامیده می‌شود. علاوه بر این Unpickling به فرآیند از حالت سریالی خارج کردن هم اشاره دارد.

Pickling

  • تبدیل یک شی سلسله مراتبی پایتون به جریان بایتی pickling نامیده می‌شود. از Pickling به عنوان سریال‌سازی نیز یاد می‌شود.

اگر به تازگی یک مدل شبکه عصبی ایجاد کرده‌اید، می‌توانید آن مدل را در هارد دیسک خود ذخیره کنید که به آن pickle می‌گویند و در ادامه آن‌را از حالت سریالیز خارج کنید که به آن unpickle می‌گویند تا بتوانید در آینده در برنامه دیگری استفاده کنید. 

6. چگونه حافظه در پایتون مدیریت می‌شود؟

پایتون دارای یک فضای خصوصی به‌نام heap است که تمام اشیا را در خود ذخیره می‌کند. مدیر حافظه پایتون جنبه‌های مختلف این پشته مانند اشتراک، ذخیره، تقسیم‌بندی و تخصیص را تنظیم می‌کند. کاربر هیچ کنترلی روی پشته ندارد و فقط مفسر پایتون به آن دسترسی دارد.

7. آرگومان‌ها در پایتون با مقدار ارسال می‌شوند یا به صورت ارجاع؟

آرگومان‌ها در پایتون توسط یک ارجاع منتقل می‌شوند. این حرف بدان معنی است که هر تغییری در یک تابع ایجاد می‌شود در شی اصلی منعکس می‌شود. برای درک بهتر مطلب به دو مجموعه کد زیر دقت کنید: 

در مثال اول، ما فقط یک مقدار به عنصر I اختصاص دادیم، بنابراین خروجی [3,2,3,4] است.

در مثال دوم، ما یک شی کاملاً جدید برای "l" ایجاد کرده‌ایم. با این‌حال، مقادیر [3,2,3,4] در خروجی نمایش داده نمی‌شود، زیرا خارج از تعریف تابع است.

8- چگونه می‌توان اعداد تصادفی را در پایتون تولید کرد؟

برای تولید اعداد تصادفی در پایتون، ابتدا باید ماژول تصادفی را وارد کنید.

تابع random مقدار شناور تصادفی بین 0 و 1 را ایجاد می‌کند. فراخوانی تابع فوق به شرح زیر است:

 random.random()

تابع randrange یک عدد تصادفی را در یک محدوده مشخص تولید می‌کند.  ترکیب نحوی تابع فوق به شرح زیر است:

randrange(beginning, end, step)

چگونه فراخوانی تابع فوق به شرح زیر است:

random.randrange(1,10,2)

9. اپراتور // چه کاری انجام می‌دهد؟

در پایتون عملگر / عمل تقسیم را انجام می‌دهد و ضریب را در قالب float بر می‌گرداند.

به عنوان مثال: تقسیم 5 / 2 مقدار 2.5 را بر می‌گرداند. از طرف دیگر عملگر // ضریب را به صورت عدد صحیح بر می‌گرداند. به عنوان مثال، عمل تقسیم 5 // 2  مقدار 2 را  بر می‌گرداند.

10. اپراتور is چه کاری انجام می‌دهد؟

عملگر "is" شناسه دو شی را مقایسه می‌کند. 

list1=[1,2,3]

list2=[1,2,3]

list3=list1

list1 == list2 = True

list1 is list2 = False

list1 is list3 = True

11. هدف از دستور Pass چیست؟

فرمان Pass زمانی استفاده می‌شود که به یک ترکیب نحوی و نه عملیاتی نیاز است. به‌طور مثال، برنامه زیر یک رشته را صرفنظر از فضاهای خالی چاپ می‌کند.

var="Ha mid reza"

for i in var:

  if i==" ":

    pass

  else:

    print(i,end="")

در مثال بالا فرمان Pass اشاره به حالتی دارد که نیازی به هیچ عملی نیست.

12. چگونه بررسی می‌کنید که تمامی کاراکترهای درون یک رشته ترکیبی از رشته و اعداد هستند یا خیر؟

پایتون تابع از پیش ساخته شده‌ای به‌نام isalnum() دارد که اگر تمامی کاراکترها در یک رشته از نوع عدد و رشته باشند مقدار درست را بر می‌گرداند. مثال زیر چگونگی انجام این‌کار را نشان می‌دهد.

>> "abcd123".isalnum()

Output: True

>>”abcd@123#”.isalnum()

Output: False

روش دیگر انجام این‌کار با استفاده از دستور regex است. این‌کار به صورت زیر انجام می‌شود:

>>import re

>>bool(re.match(‘[A-Za-z0-9]+$','abcd123’))

Output: True

>> bool(re.match(‘[A-Za-z0-9]+$','abcd@123’))

Output: False

13. چگونه عناصر درون یک مجموعه متوالی را ادغام می‌کنید؟

در پایتون سه نوع مجموعه متوالی فهرست‌ها، تاپل‌ها و رشته‌ها وجود دارند. 

فهرست‌ها به صورت زیر:

>>l1=[1,2,3]

>>l2=[4,5,6]

>>l1+l2

Output: [1,2,3,4,5,6]

تاپل‌ها به صورت زیر:

>>t1=(1,2,3)

>>t2=(4,5,6)

>>t1+t2

Output: (1,2,3,4,5,6)

و رشته‌ها به صورت زیر هستند:

>>s1=“Simpli”

>>s2=“learn”

>>s1+s2

Output: ‘Simplilearn’

14. چگونه تمامی فضاهای نامی که ابتدای یک رشته قرار دارند را حذف می‌کنید؟

>>“  Python”.lstrip

Output: Python

15. چگونه تمامی رشته‌های درون یک زیررشته را با مقادیر جدید جایگزین کنیم؟

تابع replace()رشته قدیمی، رشته جدید و مکانی که عملیات باید انجام شوند را دریافت می‌کند.  

str.replace(old, new, count)

replace() returns a new string without modifying the original string.

Example - 

>>"Hey Hamid. How are you, Hamid?".replace(“hamid",“Hamid Reza",1)

Output: “Hey Hamid. How are you, Hamid Reza?

16. چه تفاوتی میان دستور Del و Remove در فهرست‌ها وجود دارد؟

دستور del تمامی عناصر یک فهرست را در محدوده تعیین شده حذف می‌کند. ترکیب نحوی آن به صورت del list[start:end] است. دستور remove عناصر را بر مبنای عنصر تعیین شده حذف می‌کند. ترکیب نحوی آن به صورت list.remove(element) است.

چگونگی به‌کارگیری دستورات به شرح زیر است:

>>lis=[‘a’, ‘b’, ‘c’, ‘d’]

>>del lis[1:3]

>>lis

Output: [“a”,”d”]

>>lis=[‘a’, ‘b’, ‘b’, ‘d’]

>>lis.remove(‘b’)

>>lis

Output: [‘a’, ‘b’, ‘d’]

17. چگونه محتوای درون یک فایل متنی را در حالت Reverse Order نشان می‌دهید؟

شما می‌توانید محتوا یک فایل متنی را در حالت معکوس بر مبنای مراحل زیر چاپ کنید:

  • فایل را با استفاده از تابع open() باز کنید. 
  • محتویات فایل را درون ک فهرست ذخیره کنید. 
  • محتویات درون فهرست را معکوس کنید.
  • حلقه‌ای تکرارشونده برای فهرست ایجاد کنید تا محتوای درون آن خوانده شود. 

18. چه تفاوتی میان توابع append() و extend() وجود دارد؟

تابع append() یک عنصر را به انتهای یک فهرست اضافه می‌کند، در حالی که تابع extend() عناصر را به ترتیب به انتهای فهرست اضافه می‌کند. تفاوت عملکردی دو تابع مذکور را در ادامه مشاهده می‌کنید:

تابع append

Example - 

>>lst=[1,2,3]

>>lst.append(4)

>>lst

Output:[1,2,3,4]

تابع extend

Example - 

>>lst=[1,2,3]

>>lst.extend([4,5,6])

>>lst

Output:[1,2,3,4,5,6]

19. خروجی قعط کد زیر چیست؟

>>def addToList(val, list=[]):

>> list.append(val)

>> return list

>>list1 = addToList(1)

>>list2 = addToList(123,[])

>>list3 = addToList('a’)

>>print ("list1 = %s" % list1)

>>print ("list2 = %s" % list2)

>>print ("list3 = %s" % list3)

خروجی قطعه کد زیر به شرح زیر است:

list1 = [1,’a’]

list2 = [123]

lilst3 = [1,’a’]

توجه داشته باشید که list1 و list3 برابر هستند. وقتی اطلاعات را به addToList منتقل کردیم، این کار را بدون مقدار دوم انجام دادیم. اگر یک لیست خالی به عنوان مقدار دوم نداشته باشیم کار با یک لیست خالی شروع می‌شود و در ادامه مقادیر به آن اضافه می‌شوند. برای list2، ما مقدار را به یک لیست خالی اضافه کردیم، بنابراین مقدار آن [123] میشود.

برای list3 ، ما "a" را به لیست اضافه می‌کنیم. از آن‌جایی که ما لیست را تعیین نکردیم، این یک مقدار مشترک است. این به این معنی است که لیست مجدداً تنظیم نمی‌شود و مقدار آن را به صورت [1,’a’] دریافت می‌کنیم.

به یاد داشته باشید که یک لیست پیش‌فرض فقط یک بار در یک تابع ایجاد می‌شود و نه در زمان فراخوانی مقادیر آن.

20. چه تفاوتی میان یک فهرست و یک تاپل وجود دارد؟

فهرست‌ها قابل تغییر هستند در حالی که تاپل‌ها غیر قابل تغییر هستند. مثال زیر این موضوع را نشان می‌دهد:

List 

>>lst = [1,2,3]

>>lst[2] = 4

>>lst

Output:[1,2,4]

Tuple 

>>tpl = (1,2,3)

>>tpl[2] = 4

>>tpl

Output:TypeError: 'tuple'

the object does not support item

assignment

به این مطلب چند ستاره می‌دهید؟(امتیاز: 4.5 - رای: 1)

ثبت نظر تعداد نظرات: 0 تعداد نظرات: 0
usersvg